package com.example.listener;

import jakarta.annotation.Resource;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;

import java.lang.invoke.VarHandle;
import java.util.Map;

/**
 * 作者:xuSen
 * 日期2025/4/17 12:07
 */
@Component
@RabbitListener(queues = "email")
public class MailQueueListener {
    @Resource
    private JavaMailSender javaMailSender;
    @Value("${spring.mail.username}")
    private String username;
    /**
     * 处理接收到的RabbitMQ消息，根据消息内容发送邮件
     * 此方法根据传入的类型生成不同的邮件内容并发送
     *
     * @param date 包含邮件相关信息的映射，包括email、code和type字段
     */
    @RabbitHandler
    public void sendMail(Map<String, Object> date) {
        // 从传入的映射中提取邮件接收者地址、验证码和邮件类型
        String email = (String)date.get("email");
        Integer code = (Integer)date.get("code");
        String type =(String) date.get("type");

        // 根据邮件类型创建SimpleMailMessage实例
        SimpleMailMessage message =switch (type) {
            case "register":
                // 创建注册验证邮件
                yield createMailMessage("欢迎注册我们学校的论坛网站", email,"您的验证码为："+code+"有效时间为3分钟，为了您的安全请不要向他人泄露验证码");
            case "reset":
                // 创建密码重置验证邮件
                yield createMailMessage("您的密码重置邮件", email,"您的验证码为："+code+"有效时间为3分钟，为了您的安全请不要向他人泄露验证码");
            case "modify":
                // 创建邮箱修改验证邮件
                yield createMailMessage("您的邮箱修改邮件",email,"您的验证码为："+code+"有效时间为3分钟，为了您的安全请不要向他人泄露验证码");
            default:
                // 不支持的邮件类型，返回null
                yield null;
        };

        // 如果消息为空，则不执行发送操作，直接返回
        if(message == null) {
            return;
        }

        // 发送邮件
        javaMailSender.send(message);
    }
    /**
     * 创建一个简单的邮件消息对象
     *
     * @param title 邮件标题
     * @param email 收件人邮箱地址
     * @param content 邮件内容
     * @return 返回一个初始化后的SimpleMailMessage对象
     */
    private SimpleMailMessage createMailMessage(String title, String email,String content) {
        // 创建一个SimpleMailMessage对象
        SimpleMailMessage message = new SimpleMailMessage();
        // 设置邮件标题
        message.setSubject(title);
        // 设置邮件内容
        message.setText(content);
        // 设置收件人邮箱地址
        message.setTo(email);
        // 设置发件人邮箱地址
        message.setFrom(username);
        // 返回初始化后的邮件消息对象
        return message;
    }
}
